

function hook_after_so_loaded() {
    var hasHooked = false;
    // 目标 so 名
    var soName = "libsscronet.so";
    // 目标函数偏移
    var offset = 0x272a44;

    // hook android_dlopen_ext
    var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
    if (android_dlopen_ext) {
        Interceptor.attach(android_dlopen_ext, {
            onEnter: function (args) {
                var pathptr = args[0];
                if (pathptr) {
                    this.path = pathptr.readCString();
                }
            },
            onLeave: function (retval) {
                if (hasHooked) return; // 已 hook 过，直接返回
                if (this.path && this.path.indexOf(soName) >= 0) {
                    // 检查 so 是否已加载
                    var base = Module.findBaseAddress(soName);
                    console.log("so文件地址为："+base);
                    if (base) {
                        hasHooked = true;
                        var funcPtr = base.add(offset);
                        console.log("so 加载完成，开始 hook 目标函数: " + funcPtr);

                        try {
                            Interceptor.attach(funcPtr, {
                                onEnter: function (args) {
                                    // 你可以在这里加日志
                                },
                                onLeave: function (retval) {
                                    console.log("进入函数成功开始修改值");
                                    console/log("需要hook的函数返回值为："+ retval);
                                    // retval.replace(0x1);
                                    // console.log("成功修改");
                                }
                            });
                            console.log("hook 成功");
                        } catch (e) {
                            console.log("hook 失败: " + e);
                        }
                    } else {
                        console.log("so 已加载但找不到基址");
                    }
                }
            }
        });
    } else {
        console.log("找不到 android_dlopen_ext");
    }
}

// 只需调用一次
setImmediate(hook_after_so_loaded);